package top.whysu.edevice.service.manage;

import org.springframework.transaction.annotation.Transactional;
import top.whysu.edevice.dto.manage.*;
import top.whysu.edevice.dto.page.PagenationDataDTO;
import top.whysu.edevice.po.manage.ManageVoucherPO;

import java.math.BigDecimal;
import java.util.List;

/**
 * 凭证管理
 */
public interface ManageVoucherService {

    /**
     * 新增/更新凭证组
     */
    @Transactional
    BigDecimal wholeAddModifyVoucher(VoucherAddModifyDTO voucherAddModifyDTO);

    /**
     * 删除凭证组
     */
    @Transactional
    void wholeDeleteVoucher(BigDecimal id);

    /**
     * 分页查询凭证组列表
     */
    PagenationDataDTO<ManageVoucherPO> selectPage(VoucherQueryDTO voucherQueryDTO);

    /**
     * 生成六位邀请码
     */
    String generateVoucherNo();

    /**
     * 二维表格-凭证组-账号关联关系
     */
    PagenationDataDTO<AssignAccountPageDTO> getAssignAccountPage(AssignAccountQueryDTO queryDTO);

    /**
     * 添加凭证组-账号关联关系
     *
     * @return 凭证组-账号-关联关系的id
     */
    @Transactional
    BigDecimal wholeAddAssignAccount(AssignAccountAddDTO addDTO);

    /**
     * 删除凭证组-账号关联关系
     *
     * @param relativeId 指的是e_relative_voucher_account的id
     */
    @Transactional
    void wholeDeleteVoucherAccountRelative(BigDecimal relativeId);

    /**
     * 获取所有的凭证组名称列表
     *
     * @return 列表
     */
    List<VoucherNameDTO> getAllVoucherNameList();

    /**
     * 根据treeId查询凭证组
     *
     * @param voucherTreeId 凭证组树结构id
     * @return 凭证组信息
     */
    ManageVoucherPO getVoucherByTreeId(BigDecimal voucherTreeId);
}
